﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Globalization;
using System.Threading;
using DLULearningNetworkModel;
using DLULearningNetwork.Libs;
namespace DLULearningNetwork.Controllers
{
    public class BaseController : Controller
    {
		protected override void OnActionExecuting(ActionExecutingContext filterContext)
		{
			base.OnActionExecuting(filterContext);
            string controllerName =filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
            string actionName = filterContext.ActionDescriptor.ActionName.ToLower();
            //Kiểm tra xem các controller, action nào được phép truy cập.
            //Undone : có thể xem thông tin profile của người dùng mà hok cần thiết phải đăng nhập.
			if ((controllerName == "home" || controllerName == "adminaccount") && (actionName == "logon" || actionName == "logout")
				|| actionName == "forgotpassword" || actionName  == "noaccess")
			    return;
			else
			    CheckPermission(filterContext);
		}

		//protected override void Execute(System.Web.Routing.RequestContext requestContext)
		//{
		//    //Get the {language} parameter in the RouteData
		//    //string UILanguage = requestContext.RouteData.Values["language"].ToString();
		//    string UILanguage = "";
			
		//    if (requestContext.HttpContext.Request != null)
		//    {
		//        string query = requestContext.HttpContext.Request.Url.Query;
		//        if (query != "" && query.IndexOf("lang=") >= 0)
		//            UILanguage = query.Substring(query.LastIndexOf("=") + 1);
		//        if(UILanguage == null)
		//            UILanguage = System.Globalization.CultureInfo.CurrentUICulture.Parent.Name;
		//        else if (UILanguage == "")
		//            UILanguage = System.Globalization.CultureInfo.CurrentUICulture.Parent.Name;
		//    }
		//    else
		//        UILanguage = Thread.CurrentThread.CurrentUICulture.Parent.Name;
		//    //Get the culture info of the language code
		//    CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage);
		//    Thread.CurrentThread.CurrentCulture = culture;
		//    Thread.CurrentThread.CurrentUICulture = culture;
		//    base.Execute(requestContext);
		//}

		bool CanAccess(string controllerName, string actionName)
		{
			if (controllerName.ToLower() == "adminaccount")
				if (actionName.ToLower() == "logon" || actionName.ToLower() == "logout" || actionName.ToLower() == "detail" || actionName.ToLower() == "index"
					|| actionName.ToLower() == "changepassword" || actionName.ToLower() == "update")
					return true;
			return false;
		}

		void CheckPermission(ActionExecutingContext filterContext)
		{
            //Có thể tùy biến, kiểm tra các quyền để kiểm tra người dùng có thể truy cập, yêu cầu môt controller nào đó
            //Hiện tại, người dùng phải đăng nhập hệ thống mới có thể tương tác với các chức năng của hệ thống
            if (LoginUser == null)
            {
                //Quay về trang giới hạn truy cập
                filterContext.Result = new RedirectResult("~/Home/NoAccess");
            }
		}

		public static Account LoginUser
		{
			get
			{
				if (LibSession.Get(Constants.ACCOUNT_LOGIN) != null)
					return (Account)(LibSession.Get(Constants.ACCOUNT_LOGIN));
				else
				{
					return null;
				}
			}
		}

    }
}
